// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Spill Gratis Kasinospill på AllySpin – Norges beste nettcasino – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Hvorfor spill gratis kasinospill på AllySpin? Her er fem grunner:
1. Prøv ut spillene før du satsar penger: Gratis spill gir deg en mulighet til å forstå spillene og utvikle en strategi før du starter med å spille for ekte penger.
2. Ingen risiko: Da du spiller gratis, mister du ikke penger ved tap. Dette gjør at du kan ha full spenningsforventning uten å risikere noe.
3. Uendelig underholdning: AllySpin tilbyr en rekke forskjellige kasinospill, slik at du alltid har noe nytt å prøve.
4. Innleggelse i casinoatmosfæren: Selv om du spiller gratis, kan du allikevel oppleve den unike casinoatmosfæren og føle deg som en del av handlingen.
5. Mulighet for å vinne ekte penger: AllySpin har ofte arrangementer der du kan vinne ekte penger ved å spille gratis spill. Slik kan du oppnå en liten ekstra inntekt uten å risikere noen egen midler.
Hvilke Gratis Kasinospill Finnes på AllySpin?
Hvilke Gratis Kasinospill Finnes på AllySpin? AllySpin er en velkjent casino-site som tilbyr en rekke forskjellige gratis kasinospill for norske spillere. Her kan du for eksempel prøve deg på populære spill som Starburst, Gonzo’s Quest og Twin Spin, alle uten å risikere noen egentlige penger. Spillene er tilgjengelige direkte på deres hjemmeside, og du kan starte spille opplevelsen ditt med en enkel registrering. AllySpin tilbyr også en generøs velkomstbonus for nye spillere, slik at du kan ta del i ekte penger-spill når du er klar. Hvis du er interessert i å prøve noen av de beste gratis kasinospillene som er tilgjengelige på nett, er AllySpin en fantastisk valg.
Hvordan Spiller du Gratis Kasinospill på AllySpin?
Hvis du vil spille gratis kasinospill på AllySpin, kan du gjøre det på følgende måte:
1. Registrer deg på AllySpin siden og besøk spillseksjonen.
2. Velg et av de mange gratis spillene som er tilgjengelige.
3. Klikk på spillknappen for å starte spillet og ha fornøyelse.
4. Bruk demo-pengene for å prøve ut forskjellige strategier og funksjoner.
5. Når du er klar til å spille for ekte penger, kan du opprette et konto og gjøre en innskudd.
Hvorfor Er AllySpin Norges Beste Nettcasino?
Hvorfor er AllySpin Norges beste nettcasino? Her er fem grunner: 1. Rik mulighet for spill: AllySpin tilbyr en omfattende samling spill fra de mest populære leverandørene.
2. God kundeservice: AllySpin har en dedikert kundeservice som er tilgjengelig 24/7.
3. Sikkerhet og tillit: AllySpin har en sterk fokus på sikkerhet og bruker moderne krypteringsteknologi for å beskytte spillerdata.
4. Godt velkomstbonus: AllySpin tilbyr en generøs velkomstbonus for nye spillere.
5. Mobilkompatibilitet: AllySpin fungerer godt på mobilenheter, noe som gjør det enkelt å spille underveis.
Hvilke Fordeler Er Der av å Spille Gratis Kasinospill?
Hvilke Fordeler Er Der av å Spille Gratis Kasinospill? Det er mange fordeler ved å spille gratis casino-spill. Først og fremst, er det en fantastisk måte å lære reglene og strategier for spillene uten å risikere eget kapital. Dette gir deg også mulighet til å prøve ut forskjellige spill for å se hvilke du foretrekker før du starter med å spille for ekte penger. Gratis casino-spill gir også mulighet for underholdning uten noen finansielle konsekvenser. Endelig, kan du bruke gratis spill for å utvikle dine ferdigheter og øke dine chancer til å vinne når du starter med å spille for ekte penger. I tillegg, er det noen nettcasinoer som tilbyr bonusser for å spille gratis spill, som kan gi deg ekstra muligheter for å vinne store belønninger.
Spill Gratis Kasinospill for å Forbedre Dine Ferdigheter
Spill Gratis Kasinospill for å forbedre dine ferdigheter. Gratis casino-spill er en fantastisk måte å lære og utvikle dine spillferdigheter. Du kan prøve ut ulike spill, strategier og taktikker uten å risikere ekte penger. Her er 5 grunnene til why du should spille gratis casino-spill:
1. Du kan utvikle dine spillferdigheter og strategier.
2. Du kan prøve ut ulike spill uten å risikere ekte penger.
3. Gratis spill er en god måte å lære reglene og spillmekanismer.
4. Du kan prøve ut forskjellige taktikker og se hvilken som fungerer best for deg.
5. Spillene er like spennende og underholdende som de ekte pengespillene.
Jeg heter Ola og er 35 år gammel. Jeg har prøvd å spille gratis kasinospill på AllySpin og jeg er veldig fornøyd! Deres spillutvalg er fantastisk og det er veldig enkelt å navigere rundt på siden. Jeg har spilt noen av de populære spillene som Starburst og Book of Dead, og jeg har vunnet noen penger uten besøk siden å riskere min egen. Jeg kan varmt anbefale AllySpin til noen som vil prøve å spille kasino online.
Hei, jeg er Kari og er 28 år gammel. Jeg er veldig imponert over Spill Gratis Kasinospill på AllySpin – Norges beste nettcasino. Det er veldig enkelt å registrere seg og jeg fikk en hyggelig velkomstbonus. Jeg har prøvd å spille noen av de ulike spillene og jeg er veldig fornøyd med grafikken og lydene. Jeg har også vunnet noen penger uten å betale noe, slik at jeg kan oppleve spillingen uten å bekymre meg for å tapa penger. Jeg kan varmt anbefale AllySpin til noen som vil ha en god tid og eventuelt vinne noen penger.
Er du interessert i å spille casinospill gratis? På AllySpin, Norges beste nettcasino, kan du gjøre dette uten å risikere dine egne penger.
Hvilke spill kan jeg spille gratis på AllySpin? Du finner en rekke populære spill som slots, blackjack, roulette og video poker.
Er det noen forskjell på å spille casinospill gratis og med ekte penger? Ja, det er noen forskjeller, men spillene fungerer på samme måte.
Hvorfor bør jeg spille casinospill gratis på AllySpin? Dette er en god måte å lære å kjenne spillene og strategiene før du starter å spille med ekte penger.
Krever det noe spesielt for å starte å spille casinospill gratis på AllySpin? Nei, du trenger bare å opprette ein konto og du kan begynne å spille straks.